package com.djf.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.djf.entity.Order;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单服务接口
 * 
 * @author djf
 * @since 2024-01-20
 */
public interface OrderService extends IService<Order> {

    /**
     * 创建订单
     * 
     * @param order 订单信息
     * @return 创建的订单
     */
    Order createOrder(Order order);

    /**
     * 根据用户ID查询订单
     * 
     * @param userId 用户ID
     * @return 订单列表
     */
    List<Order> getOrdersByUserId(Long userId);

    /**
     * 根据租户ID查询订单
     * 
     * @param tenantId 租户ID
     * @return 订单列表
     */
    List<Order> getOrdersByTenantId(Long tenantId);

    /**
     * 根据时间范围查询订单
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单列表
     */
    List<Order> getOrdersByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据用户ID和时间范围查询订单
     * 
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单列表
     */
    List<Order> getOrdersByUserIdAndTimeRange(Long userId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据租户ID和时间范围查询订单
     * 
     * @param tenantId 租户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单列表
     */
    List<Order> getOrdersByTenantIdAndTimeRange(Long tenantId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 更新订单状态
     * 
     * @param orderId 订单ID
     * @param orderStatus 订单状态
     * @return 是否更新成功
     */
    boolean updateOrderStatus(Long orderId, Integer orderStatus);

    /**
     * 统计指定时间范围内的订单数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单数量
     */
    Long countOrdersByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 生成测试数据
     * 
     * @param count 生成数量
     * @return 生成的订单列表
     */
    List<Order> generateTestData(int count);
}